import { Service } from "egg";
export const IdempotentPrefix = "I_MTD";
/**
 * 操作Redis辅助类
 */
class RedisHelperService extends Service {
  /**
   * 设置一个有过期时间的key
   * @param key
   * @param value
   */
  async setWithExpire(key: string, value: any, time: number) {
    try {
      // 对像为空
      if (value === null) {
        value = "";
      }
      // 判断是否是对象
      if (typeof value === "object") {
        value = JSON.stringify(value);
      }

      await this.ctx.app.redis.set(key, value, "EX", time);
    } catch (e) {}
  }
  /**
   * 设置一个无过期时间的key
   * @param key
   * @param value
   */
  async serWith(key: string, value: any) {
    try {
      // 对像为空
      if (value === null) {
        value = "";
      }
      // 判断是否是对象
      if (typeof value === "object") {
        value = JSON.stringify(value);
      }
      await this.ctx.app.redis.set(key, value);
    } catch (e) {}
  }

  /**
   * 通过指定的Key获取值
   * @param key
   */
  async get(key: string, format = true) {
    const value = await this.ctx.app.redis.get(key);

    if (!format) {
      return value;
    }

    try {
      if (value === null) {
        return null;
      }
      // 尝试解析为对象
      return JSON.parse(value);
    } catch (error) {
      // 不是否返回值
      return value;
    }
  }

  // async getValid(ket) {

  // }

  /**
   * 删除一个指定的Key值
   * @param key
   */
  async remove(key: string) {
    try {
      await this.ctx.app.redis.del(key);
    } catch (e) {}
  }
}

export default RedisHelperService;
